//#include<iostream>
//
//using namespace std;
//
//int main()
//{
//	string res, tmp;
//
//	while (cin >> tmp)
//	{
//		if (tmp[0] <= 'z' && tmp[0] >= 'a')
//			res += (tmp[0] - 32);
//		else
//			res += tmp[0];
//	}
//
//	cout << res;
//
//	return 0;
//}



//#include<iostream>
//#include<vector>
//
//using namespace std;
//
//int main()
//{
//	int n, x;
//	cin >> n >> x;
//	vector<int> arr(n + 1);
//
//	for (int i = 1; i <= n; i++)
//	{
//		cin >> arr[i];
//	}
//
//	int minL = 0, minR = n, l = 1, r = 1, cnt = 0;
//	while (r <= n)
//	{
//		while (cnt < x && r <= n)
//		{
//			cnt += arr[r];
//			r++;
//		}
//		while (cnt >= x)
//		{
//			if ((r - l - 1) < (minR - minL))
//			{
//				minR = r - 1;
//				minL = l;
//			}
//			cnt -= arr[l];
//			l++;
//		}
//	}
//
//	cout << minL << " " << minR << endl;
//
//	return 0;
//}


#include<iostream>
#include<vector>
#include<queue>

using namespace std;

int main()
{
	priority_queue<long long> heap;
	int n, k;
	cin >> n >> k;
	long long t,cnt = 0;
	for (int i = 0; i < n; i++)
	{
		cin >> t;
		if (t % 2 == 0)
			heap.push(t);
		else
			cnt += t;
	}

	while (((k--) > 0) && !heap.empty())
	{
		long long cur = heap.top();
		long long half = cur / 2;
		heap.pop();
		if (half % 2 == 0)
			heap.push(half);
		else
			cnt += half;
	}

	while (!heap.empty())
	{
		cnt += heap.top();
		heap.pop();
	}

	cout << cnt << endl;

	return 0;
}